#ifndef _OUTPUT_MERGE_STAGE_H_
#define _OUTPUT_MERGE_STAGE_H_

namespace DeviousRenderer
{
	class OutputMergeStage
	{
	public:
		OutputMergeStage();
		virtual ~OutputMergeStage();

		void			SetFeatureLevel(D3D_FEATURE_LEVEL level){ m_FeatureLevel = level; }
		void			SetBlendState(int state);
		void			SetDepthStencilState(int state, unsigned int stencilRef = 0);
		void			SetRenderTarget(unsigned int slot, int rtv);
		void			SetDepthStencilTarget(int dsv);
		void			SetUnorderredAccessView(unsigned int slot, int uav, unsigned int initCount = -1);

	protected:
		D3D_FEATURE_LEVEL			m_FeatureLevel;
		int							m_iBlendState;
		int							m_iDepthStencilState;
		unsigned int				m_uiStencilRef;
		int							m_iRenderTargetViews[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT];
		int							m_iDepthTargetView;
		int							m_iUnorderedAccessViews[D3D11_PS_CS_UAV_REGISTER_COUNT];
		unsigned int				m_uiUAVInitialCounts[D3D11_PS_CS_UAV_REGISTER_COUNT];
	};
}
#endif//_OUTPUT_MERGE_STAGE_H_